#include <stdint.h>
#include <stdbool.h>
#include <inttypes.h>
#include <stddef.h>

/**
 * @brief 将十进制数转换为四个倒序排列的十六进制字节
 * @param decimal_number 输入的数字（支持负数补码处理）
 * @param result 输出缓冲区（至少4字节）
 * @param error 错误信息指针
 * @return 成功返回true，失败返回false并设置error
 */


bool decimal_to_four_hex_numbers(int64_t decimal_number, uint8_t result[4], const char **error)
{
    /* 处理32位数字范围 */
    const int64_t min_value = -0x80000000LL;   // -2^31
    const int64_t max_value = 0xFFFFFFFFLL;    // 2^32-1
    
    /* 负数补码处理（自动溢出为32位无符号数） */
    uint32_t num;
    if (decimal_number < 0) {
        num = (uint32_t)(decimal_number + 0x100000000LL); // 负数转补码
    } else {
        num = (uint32_t)decimal_number; // 直接截断高位
    }

    /* 直接通过位操作提取字节（避免字符串操作） */
    result[0] = (num >> 0)  & 0xFF;  // 低位字节 -> 结果[0]
    result[1] = (num >> 8)  & 0xFF;
    result[2] = (num >> 16) & 0xFF;
    result[3] = (num >> 24) & 0xFF;  // 高位字节 -> 结果[3]

    /* 倒序交换字节 */
    for (int i = 0; i < 2; i++) { // 只需交换前半和后半
        uint8_t temp = result[i];
        result[i] = result[3 - i];
        result[3 - i] = temp;
    }

    *error = NULL;
    return true;
}


